package ligueBaseball;

import java.sql.Date;
import java.sql.SQLException;


public class GestionMatch {

    private Connexion cx;
    private Match match;
    private Equipe equipe;

    GestionMatch(Match match, Equipe equipe) {
        this.cx = match.getConnexion();
        this.match = match;
        this.equipe = equipe;
    }

    public void creerMatch(String readDate, String readTime, String readNomLocal, String readNomVisiteur) throws SQLException, LigueException, Exception {
        try {
            System.out.println(readDate);
            System.out.println(readTime);
            System.out.println(readNomLocal);
            System.out.println(readNomVisiteur);
            
            TupleEquipe tupleEquipeLocal = equipe.getEquipe(readNomLocal);
            TupleEquipe tupleEquipeVisiteur = equipe.getEquipe(readNomVisiteur);
            if (tupleEquipeLocal == null) {
                throw new LigueException("Equipe \"" + tupleEquipeLocal.getNom() + "\" inexistante.");
            }
            if (tupleEquipeVisiteur == null) {
                throw new LigueException("Equipe \"" + tupleEquipeVisiteur.getNom() + "\" inexistante.");
            }
            if (tupleEquipeLocal.getId() == tupleEquipeVisiteur.getId()) {
                throw new LigueException("Les deux equipes sont les memes.");
            }

            if (!match.matchPossible(readDate, readTime, tupleEquipeLocal.getId(), tupleEquipeVisiteur.getId())) {
                throw new LigueException("On ne peut pas creer le match car les equipes sont deja occupees");
            }

            match.inscrire(readDate, readTime, tupleEquipeLocal.getId(), tupleEquipeVisiteur.getId(), tupleEquipeLocal.getTerrainId());
            cx.commit();

        } catch (Exception e) {
            cx.rollback();
            throw e;
        }
    }

    public void afficherResultats(String readString) throws SQLException {
            System.out.print(match.afficherResultatsNom(readString));
    }

    public void afficherResultatsDate(Date readDate) throws SQLException {

            System.out.print(match.afficherResultatsDate(readDate));
    }

    public void entrerResultatMatch(String readDate, String readTime, String readNomLocal, String readNomVisiteur, int pointsLocal, int pointsVisiteur) throws SQLException, LigueException, Exception {
        try {
            if (pointsLocal < 0 || pointsVisiteur < 0) {
                throw new LigueException("Le pointage est negatif.");
            }

            TupleEquipe tupleEquipeLocal = equipe.getEquipe(readNomLocal);
            TupleEquipe tupleEquipeVisiteur = equipe.getEquipe(readNomVisiteur);
            if (tupleEquipeLocal == null) {
                throw new LigueException("Equipe \"" + tupleEquipeLocal.getNom() + "\" inexistante.");
            }
            if (tupleEquipeVisiteur == null) {
                throw new LigueException("Equipe \"" + tupleEquipeVisiteur.getNom() + "\" inexistante.");
            }
            if (tupleEquipeLocal.getId() == tupleEquipeVisiteur.getId()) {
                throw new LigueException("Les deux equipes sont les memes.");
            }

            match.inscrirePointage(readDate, readTime, tupleEquipeLocal.getId(), tupleEquipeVisiteur.getId(), pointsLocal, pointsVisiteur);
            cx.commit();

        } catch (Exception e) {
            cx.rollback();
            throw e;
        }

    }
}
